package com.pony.iphone.config;

//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.fasterxml.jackson.databind.SerializationFeature;
//import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
//import org.springframework.amqp.core.Binding;
//import org.springframework.amqp.core.BindingBuilder;
//import org.springframework.amqp.core.DirectExchange;
//import org.springframework.amqp.core.Queue;
//import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
//import org.springframework.amqp.rabbit.connection.ConnectionFactory;
//import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
//import org.springframework.amqp.support.converter.MessageConverter;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;

/**
 * @author pony
 * @description: RabbitMQ 配置类
 * @version 1.0
 */
//@Configuration
//public class QuestionQueueConfig {
//
//    // 钉钉消息-队列名称
//    public static final String QUESTION_QUEUE = "question.message.queue";
//    // 钉钉消息-交换机名称
//    public static final String QUESTION_EXCHANGE = "question.exchange";
//    // 钉钉消息-路由键, 消息只会被发送到绑定键完全匹配的队列
//    public static final String QUESTION_ROUTING_KEY = "question.message";
//
//    /**
//     * 创建一个持久化的钉钉消息队列
//     * @return 队列
//     */
//    @Bean
//    public Queue questionQueue() {
//        /**
//         * 参数：QUESTION_QUEUE：队列名称
//         *      true：是否持久化（重启后队列不丢失）
//         *      false：是否排他（只能被当前连接使用）
//         *      false：是否自动删除（没有消费者时自动删除）
//         *  默认就是 true, false, false
//         */
//        //return new Queue(QUESTION_QUEUE);
//        return new Queue(QUESTION_QUEUE, true, false, false);
//    }
//
//    /**
//     * 创建一个持久化的钉钉消息交换机
//     * @return 交换机
//     */
//    @Bean
//    public DirectExchange questionExchange() {
//        return new DirectExchange(QUESTION_EXCHANGE);
//    }
//
//    /**
//     * 创建一个绑定关系
//     * @param questionQueue 队列
//     * @param questionExchange 交换机
//     * @return 绑定关系
//     */
//    @Bean
//    public Binding questionBinding(Queue questionQueue, DirectExchange questionExchange) {
//        return BindingBuilder.bind(questionQueue).to(questionExchange).with(QUESTION_ROUTING_KEY);
//    }
//
//    /**
//     * mq, 默认的不支持
//     * SimpleMessageConverter only supports String, byte[] and Serializable payloads
//     * 序列化，json和对象之间转换
//     * 自动将Java对象序列化为JSON
//     * 接收时自动反序列化为Java对象
//     * @return
//     */
//    @Bean
//    public MessageConverter jsonMessageConverter() {
//        ObjectMapper objectMapper = new ObjectMapper();
//        // 注册 Java 8 日期时间模块
//        objectMapper.registerModule(new JavaTimeModule());
//        // 禁用日期时间作为时间戳
//        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
//        return new Jackson2JsonMessageConverter(objectMapper);
//    }
//
//    @Bean
//    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
//            ConnectionFactory connectionFactory) {
//        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
//        factory.setConnectionFactory(connectionFactory);
//        factory.setMessageConverter(jsonMessageConverter());
//        return factory;
//    }
//}